package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import modelo.Ingrediente;
import modelo.Producto;
import modelo.DetalleProducto;
import modelo.Conexion;
import vista.VProducto;


public class ControladorProducto implements ActionListener{
	public VProducto vProducto;
	public Producto producto;
	private Vector<DetalleProducto> detalles;
	Conexion BD;

	public ControladorProducto(VProducto vp){
		vProducto=vp;
		detalles=new Vector<DetalleProducto>(); 
		try {
			BD = new Conexion();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

		
		public void actionPerformed(ActionEvent ae) {
			if(ae.getSource()== vProducto.getBtnRegistrar()){
				if(validarCampos()){
					if(detalles.size()==0)
						JOptionPane.showMessageDialog(new JFrame(), 
								"El producto debe poseeer por lo menos 1 ingrediente","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
					else{
				String nombreCategoria,codCategoria;
				nombreCategoria=vProducto.getJcbCategorias().getSelectedItem().toString();
				codCategoria=BD.ObtenerCodCategoria(nombreCategoria);
				producto = new Producto(codCategoria,vProducto.getTxtCodProducto().getText(),vProducto.getTxtDescripcion().getText(), vProducto.getTxtFechaReg().getText(),Float.parseFloat(vProducto.getTxtPrecio().getText()));
				BD.insertarProducto(producto);
				BD.insertarIngredientesPorProductos(detalles);
				JOptionPane.showMessageDialog(new JFrame(), 
						"el producto ha sido registrado con exito","Producto", 
						JOptionPane.INFORMATION_MESSAGE);
				    inicio();
					}
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor introduzca todos los datos del producto","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
			}
			if(ae.getSource()== vProducto.getBtnAgregar()){
		
			  
				float cant,precio=0;
				DetalleProducto detalle;
				String codProducto,cantidad;
				cantidad=vProducto.getTxtCantidad().getText();
				if(cantidad.equals(""))
					JOptionPane.showMessageDialog(new JFrame(), 
							"Seleccione la cantidad de ingrediente","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
				else
				{
				String nombreIngrediente,codIng;
				float totalActual=Float.parseFloat(vProducto.getTxtPrecio().getText());
				cant=Float.parseFloat(vProducto.getTxtCantidad().getText());
				codProducto=vProducto.getTxtCodProducto().getText();
				nombreIngrediente=vProducto.getJcbIngredientes().getSelectedItem().toString();
				codIng=BD.ObtenerCodIngrediente(nombreIngrediente);
				Ingrediente ingrediente=BD.consultarIngrediente(codIng);
				precio=precio+(ingrediente.getPrecio()*cant);
				vProducto.getTxtPrecio().setText(String.valueOf(precio+totalActual));
				detalle=new DetalleProducto(cant,codIng,codProducto);
				vProducto.getListaModel().addElement(detalle.getCantidad()+"  "+nombreIngrediente);
				detalles.add(detalle);
				
				
				}
				
			}
			if(ae.getSource()== vProducto.getBtnRemover()){
				
				int indice=vProducto.getListaIngredientes().getSelectedIndex();
				if(indice>=0){
				float totalActual=Float.parseFloat(vProducto.getTxtPrecio().getText());
				vProducto.getListaModel().remove(indice);
				vProducto.getListaIngredientes().repaint();
				DetalleProducto detalle=detalles.remove(indice);
				Ingrediente ingrediente=BD.consultarIngrediente(detalle.getCodIngrediente());
				float total=ingrediente.getPrecio()*detalle.getCantidad();
				vProducto.getTxtPrecio().setText(String.valueOf(totalActual-total));
				
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor seleccione el ingrediente que desea remover","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
				
			}
			if(ae.getSource()== vProducto.getBtnBuscar()){
				 String codProducto=vProducto.getTxtCodProducto().getText();
				 if(codProducto.equals(""))
					 JOptionPane.showMessageDialog(new JFrame(), 
								"Por favor introduzca el codigo del producto","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
				
					Producto producto = null;
					producto = BD.consultarProducto(codProducto);
					if(producto==null){
						JOptionPane.showMessageDialog(new JFrame(), 
								"El producto no se encuntra registrado","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
					noEncontrado();}
					else{
						vProducto.getTxtDescripcion().setText(producto.getDescripcion());
						vProducto.getTxtFechaReg().setText(producto.getFechaRegistro());
						vProducto.getTxtPrecio().setText(String.valueOf(producto.getPrecio()));
						encontrado();
					}	
			}
			if(ae.getSource()== vProducto.getBtnModificar()){
				if(validarCampos()){
				String nombreCategoria,codCategoria;
				nombreCategoria=vProducto.getJcbCategorias().getSelectedItem().toString();
				codCategoria=BD.ObtenerCodCategoria(nombreCategoria);
				producto = new Producto(codCategoria,vProducto.getTxtCodProducto().getText(),vProducto.getTxtDescripcion().getText(), vProducto.getTxtFechaReg().getText(),Float.parseFloat(vProducto.getTxtPrecio().getText()));
				BD.modificarProducto(vProducto.getTxtCodProducto().getText(),producto);
				JOptionPane.showMessageDialog(new JFrame(), 
						"Los datos del producto han sido modificado","Producto", 
						JOptionPane.INFORMATION_MESSAGE);
				
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor introduzca todos los datos del producto","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
			}
			if(ae.getSource()== vProducto.getBtnLimpiar()){
				inicio();
			}
		}
		public boolean validarCampos(){
			boolean validar=true;
			if(vProducto.getTxtDescripcion().getText().equals("") || vProducto.getTxtFechaReg().getText().equals(""))
				validar=false;
			return validar;
		}
		public void limpiarCampos(){
			vProducto.getTxtCantidad().setText("");
			vProducto.getTxtCodProducto().setText("");
			vProducto.getTxtDescripcion().setText("");
			vProducto.getTxtPrecio().setText("0");
			vProducto.getTxtDescripcion().setEditable(true);
			vProducto.getTxtCantidad().setEditable(true);
			vProducto.getListaModel().clear();
			vProducto.getTxtCodProducto().requestFocus(true);
			desActivar();
				}
		public void encontrado(){
			vProducto.getTxtCodProducto().setEditable(false);
			vProducto.getBtnRemover().setEnabled(true);
			vProducto.getTxtCantidad().setEditable(true);
			vProducto.getTxtDescripcion().setEditable(true);
			vProducto.getJcbCategorias().setEnabled(true);
			vProducto.getJcbIngredientes().setEnabled(true);
			vProducto.getBtnModificar().setEnabled(true);
			vProducto.getBtnAgregar().setEnabled(true);
			vProducto.getBtnLimpiar().setEnabled(true);
			vProducto.getBtnRegistrar().setEnabled(false);
		}
		public void noEncontrado(){
			vProducto.getBtnRegistrar().setEnabled(true);
			vProducto.getBtnAgregar().setEnabled(true);
			vProducto.getBtnRemover().setEnabled(true);
			vProducto.getTxtCantidad().setEditable(true);
			vProducto.getTxtDescripcion().setEditable(true);
			vProducto.getJcbCategorias().setEnabled(true);
			vProducto.getJcbIngredientes().setEnabled(true);
			vProducto.getBtnLimpiar().setEnabled(true);
			vProducto.getTxtCodProducto().setEditable(false);
		}
		public void desActivar(){
			vProducto.getBtnRegistrar().setEnabled(false);
			vProducto.getTxtCantidad().setEditable(false);
			vProducto.getTxtDescripcion().setEditable(false);
			vProducto.getJcbIngredientes().setEnabled(false);
			vProducto.getJcbIngredientes().setEnabled(true);
			vProducto.getBtnLimpiar().setEnabled(false);
			vProducto.getTxtCodProducto().setEditable(true);	
			
		}
		public void inicio(){
			vProducto.getBtnRegistrar().setEnabled(false);
			vProducto.getBtnAgregar().setEnabled(false);
			vProducto.getBtnRemover().setEnabled(false);
			vProducto.getBtnLimpiar().setEnabled(false);
			vProducto.getBtnModificar().setEnabled(false);
		    limpiarCampos();
			
		}
		
}
